﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;
using BL;
using Entities;

namespace StockVentas
{
    public partial class frmClientes : Form
    {
        public DataSet dt = null;
        private DataTable tablaOrigen;
        private DataTable tablaBuscados;
        string formularioOrigen;
        string accionProgress;
        string accion;
        string origen;
        private Clientes entidad;
        public frmProgress progreso;
        public DataColumn[] keyColumn;

        public frmClientes()
        {
            InitializeComponent();
            txtContacto.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtCuit.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtDireccion.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtIdCliente.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtLocalidad.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtMovil.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtProvincia.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtRazon.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtTE.TextChanged += new EventHandler(this.ActivarBotonGrabar);
            txtTransporte.TextChanged += new EventHandler(this.ActivarBotonGrabar);
        }

        private void frmClientes_Load(object sender, EventArgs e)
        {
            dt = BL.ClientesBLL.CrearDataset();
            tablaOrigen = dt.Tables["Clientes"];
            tablaOrigen.PrimaryKey = new DataColumn[] { tablaOrigen.Columns["IdClienteCLI"] };
            gvwDatos.DataSource = tablaOrigen;
            gvwDatos.Columns["IdClienteCLI"].HeaderText = "Nº cliente";
            gvwDatos.Columns["RazonSocialCLI"].HeaderText = "Razon social";
            gvwDatos.Columns["CUIT"].Visible = false;
            gvwDatos.Columns["DireccionCLI"].Visible = false;
            gvwDatos.Columns["LocalidadCLI"].Visible = false;
            gvwDatos.Columns["ProvinciaCLI"].Visible = false;
            gvwDatos.Columns["TransporteCLI"].Visible = false;
            gvwDatos.Columns["ContactoCLI"].Visible = false;
            gvwDatos.Columns["TelefonoCLI"].Visible = false;
            gvwDatos.Columns["MovilCLI"].Visible = false;
            gvwDatos.Sort(gvwDatos.Columns[1], ListSortDirection.Ascending);
            SetStateForm(FormState.inicial);  
        }

        private void gvwDatos_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            txtIdCliente.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["IdClienteCLI"].ToString();
            txtRazon.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["RazonSocialCLI"].ToString();
            txtCuit.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["CUIT"].ToString();
            txtDireccion.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["DireccionCLI"].ToString();
            txtLocalidad.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["LocalidadCLI"].ToString();
            txtProvincia.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["ProvinciaCLI"].ToString();
            txtTransporte.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["TransporteCLI"].ToString();
            txtContacto.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["ContactoCLI"].ToString();    
            txtTE.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["TelefonoCLI"].ToString();
            txtLocalidad.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["MovilCLI"].ToString();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            TextBox parametros = this.txtParametros;
            tablaBuscados = BL.ClientesBLL.Buscar(tablaOrigen, parametros);
            gvwDatos.DataSource = tablaBuscados;
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            accion = "nuevo";
            SetStateForm(FormState.insercion);
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            accion = "editar";
            SetStateForm(FormState.edicion);
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {
            origen = gvwDatos.DataSource.ToString();
            entidad = new Clientes();
            entidad.RazonSocial = txtRazon.Text.ToUpper();
            entidad.Cuit = txtCuit.Text.ToUpper();
            entidad.Direccion = txtDireccion.Text.ToUpper();
            entidad.Localidad = txtLocalidad.Text.ToUpper();
            entidad.Provincia = txtProvincia.Text.ToUpper();
            entidad.Transporte = txtTransporte.Text.ToUpper();
            entidad.Contacto = txtContacto.Text.ToUpper();
            entidad.Telefono = txtTE.Text.ToString();
            entidad.Movil = txtMovil.Text.ToString();
            
            if (accion == "nuevo")
            {
                Random rand = new Random();
                int clave = rand.Next(1, 10000);
                bool existe = true;
                while (existe == true)
                {
                    DataRow foundRow = dt.Tables["Clientes"].Rows.Find(clave);
                    if (foundRow == null)
                    {
                        existe = false;
                    }
                    else
                    {
                        clave = rand.Next(1, 500);
                    }
                }
                entidad.IdCliente = clave;
                BL.ClientesBLL.InsertarDT(tablaOrigen, entidad);
                if (origen != "Clientes")
                {
                    BL.ClientesBLL.InsertarDT(tablaBuscados, entidad);
                }
                if (gvwDatos.CurrentRow != null && gvwDatos.CurrentRow.DataBoundItem != null)
                {
                    txtIdCliente.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["IdClienteCLI"].ToString();
                    txtRazon.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["RazonSocialCLI"].ToString();
                    txtCuit.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["CUIT"].ToString();
                    txtDireccion.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["DireccionCLI"].ToString();
                    txtLocalidad.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["LocalidadCLI"].ToString();
                    txtProvincia.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["ProvinciaCLI"].ToString();
                    txtTransporte.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["TransporteCLI"].ToString();
                    txtContacto.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["ContactoCLI"].ToString();
                    txtTE.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["TelefonoCLI"].ToString();
                    txtLocalidad.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["MovilCLI"].ToString();
                }
            }
            else  //EDICION
            {
                DataRowView vistaFilaActual = (DataRowView)gvwDatos.CurrentRow.DataBoundItem;
                BL.ClientesBLL.EditarDT(vistaFilaActual, entidad);
                if (origen != "Clientes") //Estoy en el Datable originado por Buscar_click
                {
                    var registro = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["IdClienteCLI"].ToString();
                    BL.ClientesBLL.EditarDT(registro, entidad, tablaOrigen, dt);
                }
            }
            SetStateForm(FormState.inicial);
        }

        private void btnBorrar_Click(object sender, EventArgs e)
        {
            DataGridView gvwD = this.gvwDatos;
            origen = gvwDatos.DataSource.ToString();
            ClientesBLL.BorrarDT(gvwD, origen, dt);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (gvwDatos.CurrentRow != null && gvwDatos.CurrentRow.DataBoundItem != null)
            {
                txtIdCliente.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["IdClienteCLI"].ToString();
                txtRazon.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["RazonSocialCLI"].ToString();
                txtCuit.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["CUIT"].ToString();
                txtDireccion.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["DireccionCLI"].ToString();
                txtLocalidad.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["LocalidadCLI"].ToString();
                txtProvincia.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["ProvinciaCLI"].ToString();
                txtTransporte.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["TransporteCLI"].ToString();
                txtContacto.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["ContactoCLI"].ToString();
                txtTE.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["TelefonoCLI"].ToString();
                txtLocalidad.Text = ((DataRowView)gvwDatos.CurrentRow.DataBoundItem)["MovilCLI"].ToString();
            }
            SetStateForm(FormState.inicial);
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void frmClientes_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (dt.HasChanges())
            {
                formularioOrigen = "frmClientes";
                accionProgress = "grabar";
                frmProgress progreso = new frmProgress(dt, formularioOrigen, accionProgress);
                progreso.ShowDialog();
            }
        }

        public enum FormState
        {
            inicial,
            edicion,
            insercion,
            eliminacion
        }

        public void SetStateForm(FormState state)
        {
            if (state == FormState.inicial)
            {
                gvwDatos.Enabled = true;
                txtIdCliente.ReadOnly = true;
                txtIdCliente.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtRazon.ReadOnly = true;
                txtRazon.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtCuit.ReadOnly = true;
                txtCuit.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtDireccion.ReadOnly = true;
                txtDireccion.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtLocalidad.ReadOnly = true;
                txtLocalidad.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtProvincia.ReadOnly = true;
                txtProvincia.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtTransporte.ReadOnly = true;
                txtTransporte.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtContacto.ReadOnly = true;
                txtContacto.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtTE.ReadOnly = true;
                txtTE.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                txtMovil.ReadOnly = true;
                txtMovil.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                btnBuscar.Enabled = true;
                btnNuevo.Enabled = true;
                btnEditar.Enabled = true;
                btnBorrar.Enabled = true;
                btnGrabar.Enabled = false;
                btnCancelar.Enabled = false;
            }
            if (state == FormState.insercion)
            {
                gvwDatos.Enabled = false;
                txtRazon.ReadOnly = false;
                txtCuit.ReadOnly = false;
                txtDireccion.ReadOnly = false;
                txtLocalidad.ReadOnly = false;
                txtProvincia.ReadOnly = false;
                txtTransporte.ReadOnly = false;
                txtContacto.ReadOnly = false;
                txtTE.ReadOnly = false;
                txtMovil.ReadOnly = false;
                txtIdCliente.Clear();
                txtRazon.Clear();
                txtCuit.Clear();
                txtDireccion.Clear();
                txtLocalidad.Clear();
                txtProvincia.Clear();
                txtTransporte.Clear();
                txtContacto.Clear();
                txtTE.Clear();
                txtMovil.Clear();
                txtRazon.Focus();
                btnBuscar.Enabled = false;
                btnNuevo.Enabled = false;
                btnEditar.Enabled = false;
                btnBorrar.Enabled = false;
                btnGrabar.Enabled = false;
                btnCancelar.Enabled = true;
            }
            if (state == FormState.edicion)
            {
                gvwDatos.Enabled = false;
                txtRazon.ReadOnly = false;
                txtCuit.ReadOnly = false;
                txtDireccion.ReadOnly = false;
                txtLocalidad.ReadOnly = false;
                txtProvincia.ReadOnly = false;
                txtTransporte.ReadOnly = false;
                txtContacto.ReadOnly = false;
                txtTE.ReadOnly = false;
                txtMovil.ReadOnly = false;
                txtRazon.Focus();
                btnBuscar.Enabled = false;
                btnNuevo.Enabled = false;
                btnEditar.Enabled = false;
                btnBorrar.Enabled = false;
                btnGrabar.Enabled = false;
                btnCancelar.Enabled = true;
            }
        }

        private void ActivarBotonGrabar(object sender, EventArgs e)
        {
            if (btnEditar.Enabled == false)
            {
                btnGrabar.Enabled = true;
            }
        }
    }
}
